hexo 的 kramed 公式渲染器行内公式无法正常显示解决办法

Hexo 默认使用 “hexo-renderer-marked” 引擎渲染网页,该引擎会把一些特殊的 markdown 符号转换为相应的 html 标签,比如在 markdown 语法中,下划线 ‘_’ 代表斜体,会被渲染引擎处理为 <em> 标签。这与 latex 公式的语法相冲突,所以在 Melody 主题中将 marked 渲染器换成了 Kramed 网页渲染器。

1
2
npm uninstall hexo-renderer-marked --save
npm install hexo-renderer-kramed --save

但是 Kramed 渲染器也有问题,本来在 typora 中显示得好好的公式:

在网页中变成了这样:

真是惨不忍睹==

找了很久解决办法,才在 Kramed 的官方文档发现,原来 Kramed 改变了行内公式的语法,在美元符号的两侧加上点才表示行内公式:

1
`$\Latex$`

如果需要在行内代码中包含美元符号,则需要加上转义符:

1
`\$ code \$`

每次都要加点太麻烦,能不能将语法改回来呢?在这篇博文找到灵感。

进入 hexo 的安装目录 /node_modules/hexo-renderer-kramed/lib/renderer.js,发现这么一段:

1
2
3
4
5
// Change inline math rule
function formatText(text) {
// Fit kramed's rule: $$ + \1 + $$
return text.replace(/`\$(.*?)\$`/g, '$$$$$1$$$$');
}

我们将正则式中的两点去掉变成:

1
/\$(.*?)\$/g

这样 Kramed 就能识别两个 $ 之间的为行内公式了!但是要注意行内公式不可以打回车,否则又无法识别!

重启 Hexo:

1
2
hexo clean
hexo s -g

果然恢复了正常!

微信捐赠
支付宝捐赠